module utils.jwt;

import std.json : JSONValue;
import utils.constant;
import hunt.jwt.JwtToken;
import hunt.jwt.JwtAlgorithm;

/** 
* 生成token方法
* Params:
*   userData    JSONValue
* Returns: string
*/
public static string createToken(JSONValue userData)
{
    import std.format : format;
    import std.datetime.systime : Clock;

    JwtToken token = new JwtToken(JwtAlgorithm.HS256);
    string iis = "tingyu";
    long now = Clock.currTime.toUnixTime();
    string jit = format("%s%s", iis, now);
    token.claims.iss = iis;
    token.claims.iat = now;
    token.claims.exp = now + 7200;
    token.claims.jit = jit;
    token.claims.set("user", userData);
    string encodedToken = token.encode(Constant.JWT_SECRET);
    return encodedToken;
}

public static bool validateToken(string token)
{
    return JwtToken.verify(token, Constant.JWT_SECRET);
}

public static JwtToken decodeToken(string token)
{
    return JwtToken.decode(token, Constant.JWT_SECRET);
}
